import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
# 实例化驱动
driver = webdriver.Chrome()
# 打开浏览器
driver.get("https://www.baidu.com/")
# 浏览器全屏
driver.maximize_window()
# 设置隐式等待
# driver.implicitly_wait(15)
# 使用显示等待的方式定位元素：定位输入框，搜索：selenium
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"kw"))).send_keys("selenium自动化测试")
# 点击搜索按钮
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,"su"))).click()
# 点击搜索结果页面的第一个 //*[@id="2"]/div/h3/a/div/div/p/span/span
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.XPATH,"//*[@id='2']/div/h3/a/div/div/p/span/span"))).click()
"""
WebDriverWait：三个形参 ；WebDriverWait(driver,10,0.5)    ： 总10s，每隔0.5s去寻找一次元素
【1】传入driver驱动
【2】给定总体时长寻找元素
【3】每隔多久寻找一次
until：
EC.presence_of_element_located((By.ID,"kw"))：需要传入一个元组方式定位
"""


"""
# 定位输入框，搜索：selenium
driver.find_element(By.ID,"kw").send_keys("selenium自动化测试")
# 点击搜索按钮
driver.find_element(By.ID,"su").click()
# 点击搜索结果页面的第一个 //*[@id="2"]/div/h3/a/div/div/p/span/span
driver.find_element(By.XPATH,"//*[@id='2']/div/h3/a/div/div/p/span/span").click()
"""
"""
等待方式一：强制等待
代码运行到此，强制等待几s

等待方式二：隐式等待
优点：
开局声明一次，后续的元素都会受用到，如果在规定的时间内，找不到元素则抛出异常
缺点：
不管有没有你需要用到的元素，他都会加载出来后，再去做操作

等待方式三：显示等待 Webdriverwait
优点：
在规定的时间内，频繁的去找元素，如果找到了就执行，没有找到则抛出异常
缺点：
代码太长了
"""
time.sleep(3)